package la.iok.hzsvn.lewin.movie.operation.service;

import la.iok.hzsvn.lewin.movie.core.Token;
import la.iok.hzsvn.lewin.movie.operation.entity.LuckyMoney;
import la.iok.hzsvn.lewin.movie.operation.model.LuckyMoneyVo;
import la.iok.hzsvn.lewin.mybatis.model.PageVo;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.NotNullElement;
import la.iok.hzsvn.share.annotations.Nullable;

import java.util.Collection;
import java.util.Date;
import java.util.List;

public interface LuckyMoneyService extends BaseService<LuckyMoney,Long> {
    /**
     * 保存返利红包
     * @param roomId 红包可以使用的房间
     * @param amount 红包金额,单位为分
     * @return 新增记录id
     */
    Long saveReturnMoney(@Nullable Long roomId, @Nullable Integer amount);

    /**
     * 房间当前时间可以使用的返利红包。
     * @param roomId 房间id
     * @return 当前时间可以使用的返利红包
     */
    LuckyMoney currentReturnMoney(@Nullable Long roomId);

    /**
     * 查询多个房间目前能使用的返利红包
     * @param roomIds 房间id列表
     * @return 返利红包列表
     */
    @NotNull
    @NotNullElement
    List<LuckyMoney> currentReturnMoney(@Nullable Collection<Long> roomIds);

    /**
     * 使用红包
     * @param luckyMoney 红包对象,必须有id和amount
     * @param amount 期望的扣费金额
     * @return 实际扣费金额。
     */
    int use(@Nullable LuckyMoney luckyMoney, int amount);

    PageVo<LuckyMoneyVo> page(@NotNull Token token, int page, int limit, @Nullable String orderColumn, @Nullable String order,
                              @Nullable Long orgUnitId, @Nullable Long roomId, @Nullable Date start, @Nullable Date end);

    /**
     * 返利功能开关
     * @param token 操作用户
     * @param status 开关状态,on/off
     */
    void switchStatus(@NotNull Token token, @NotNull String status);

    /**
     * 是否开启了返利开关
     * @return 是返回true否则false
     */
    boolean switchStatus();

    /**
     * 查询返利开启状态
     * @param token 操作用户
     * @return 开关状态值,on/off
     */
    String switchStatus(Token token);

}
